package com.tuling.code.annotation.lesson1;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//RetentionPolicy
//1.SOURCE:在源文件中有效（即源文件保留）
//2.CLASS:在class文件中有效（即class保留）
//3.RUNTIME:在运行时有效（即运行时保留）
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface CacheResult {
	
	String key();

	String cacheName();

	String backupKey() default ""; // 缓存备份

	// 缓存穿透是指查询一个一定不存在的数据，由于缓存是不命中时需要从数据库查询，
	// 查不到数据则不写入缓存，这将导致上千万个这样的不存在的数据每次请求都要到数据库去查询，造成缓存穿透。
	// 缓存击穿,使用布隆过滤器防止黑客穿透缓存
	boolean needBloomFilter() default false;

	// 是否需要分布式锁，只允许一个用户去查询数据库数据
	boolean needLock() default false; 
}
